home *** CD-ROM | disk | FTP | other *** search
- {
- >> I was wondering if anyone could show me the equations (and perhaps a
- >> demo in standard pascal) of the following shapes. What I need to know is
- >> where to plot the point.
- >> Circle. (I've tried using the equation taught to me at school, but it
- >> Line (What I would like would be to be able to plot a line by giving it
-
- There seems yet again to be enough interest/need so I'll post this stuff just
- ONCE more.... somebody put this in SWAG or something.... PLEASE!!!
-
- [Okay Sean, here you go! -Kerry]
-
- You need a plot(x,y) procedure and a global color variable to use these as
- posted.
- }
-
- {bresenham's line}
- procedure line(x, y, x2, y2 : integer);
- var
- d, dx, dy,
- ai, bi,
- xi, yi : integer;
- begin
- if (x < x2) then
- begin
- xi := 1;
- dx := x2 - x;
- end
- else
- begin
- xi := - 1;
- dx := x - x2;
- end;
-
- if (y < y2) then
- begin
- yi := 1;
- dy := y2 - y;
- end
- else
- begin
- yi := - 1;
- dy := y - y2;
- end;
-
- plot(x, y);
-
- if dx > dy then
- begin
- ai := (dy - dx) * 2;
- bi := dy * 2;
- d := bi - dx;
- repeat
- if (d >= 0) then
- begin
- inc(y, yi);
- inc(d, ai);
- end
- else
- inc(d, bi);
-
- inc(x, xi);
- plot(x, y);
- until (x = x2);
- end
- else
- begin
- ai := (dx - dy) * 2;
- bi := dx * 2;
- d := bi - dy;
- repeat
- if (d >= 0) then
- begin
- inc(x, xi);
- inc(d, ai);
- end
- else
- inc(d, bi);
-
- inc(y, yi);
- plot(x, y);
- until (y = y2);
- end;
- end;
-
-
- {filled ellipse}
- procedure disk(xc, yc, a, b : integer);
- var
- x, y : integer;
- aa, aa2,
- bb, bb2,
- d, dx, dy : longint;
- begin
- x := 0;
- y := b;
- aa := longint(a) * a;
- aa2 := 2 * aa;
- bb := longint(b) * b;
- bb2 := 2 * bb;
- d := bb - aa * b + aa div 4;
- dx := 0;
- dy := aa2 * b;
- vLin(xc, yc - y, yc + y);
-
- while (dx < dy) do
- begin
- if (d > 0) then
- begin
- dec(y);
- dec(dy, aa2);
- dec(d, dy);
- end;
- inc(x);
- inc(dx, bb2);
- inc(d, bb + dx);
- vLin(xc - x, yc - y, yc + y);
- vLin(xc + x, yc - y, yc + y);
- end;
-
- inc(d, (3 * (aa - bb) div 2 - (dx + dy)) div 2);
- while (y >= 0) do
- begin
- if (d < 0) then
- begin
- inc(x);
- inc(dx, bb2);
- inc(d, bb + dx);
- vLin(xc - x, yc - y, yc + y);
- vLin(xc + x, yc - y, yc + y);
- end;
- dec(y);
- dec(dy, aa2);
- inc(d, aa - dy);
- end;
- end;
-